import { IPSSysDBTable } from './ipssys-dbtable';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * @export
 * @interface IPSSysDBColumn
 */
export interface IPSSysDBColumn extends IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码名称2
   * @type {string}
   */
  codeName2: string;

  /**
   * 建立SQL
   * @type {string}
   */
  createSql: string;

  /**
   * 数据类型
   * @type {string}
   */
  dataType: string;

  /**
   * 默认值
   * @type {string}
   */
  defaultValue: string;

  /**
   * 移除SQL
   * @type {string}
   */
  dropSql: string;

  /**
   * 字段长度
   * @type {number}
   * @default -1
   */
  length: number;

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 字段精度
   * @type {number}
   * @default 0
   */
  precision: number;

  /**
   * 引用数据列
   *
   * @type {IPSSysDBColumn}
   */
  getRefPSSysDBColumn(): IPSSysDBColumn | null;

  /**
   * 引用数据列
   *
   * @type {IPSSysDBColumn}
   */
  get refPSSysDBColumn(): IPSSysDBColumn | null;

  /**
   * 引用数据列（必须存在）
   *
   * @type {IPSSysDBColumn}
   */
  getRefPSSysDBColumnMust(): IPSSysDBColumn;

  /**
   * 引用数据表
   *
   * @type {IPSSysDBTable}
   */
  getRefPSSysDBTable(): IPSSysDBTable | null;

  /**
   * 引用数据表
   *
   * @type {IPSSysDBTable}
   */
  get refPSSysDBTable(): IPSSysDBTable | null;

  /**
   * 引用数据表（必须存在）
   *
   * @type {IPSSysDBTable}
   */
  getRefPSSysDBTableMust(): IPSSysDBTable;

  /**
   * 标准数据类型
   * @description 值模式 [属性标准数据类型] {0：UNKNOWN、 1：BIGINT、 2：BINARY、 3：BIT、 4：CHAR、 5：DATETIME、 6：DECIMAL、 7：FLOAT、 8：IMAGE、 9：INT、 10：MONEY、 11：NCHAR、 12：NTEXT、 13：NVARCHAR、 14：NUMERIC、 15：REAL、 16：SMALLDATETIME、 17：SMALLINT、 18：SMALLMONEY、 19：SQL_VARIANT、 20：SYSNAME、 21：TEXT、 22：TIMESTAMP、 23：TINYINT、 24：VARBINARY、 25：VARCHAR、 26：UNIQUEIDENTIFIER、 27：DATE、 28：TIME、 29：BIGDECIMAL }
   * @type {( number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29)}
   */
  stdDataType: number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29;

  /**
   * 自增列
   * @type {boolean}
   * @default false
   */
  autoIncrement: boolean;

  /**
   * 外键
   * @type {boolean}
   * @default false
   */
  fKey: boolean;

  /**
   * 允许空值输入
   * @type {boolean}
   * @default false
   */
  nullable: boolean;

  /**
   * 主键
   * @type {boolean}
   * @default false
   */
  pKey: boolean;

  /**
   * 无符号列
   * @type {boolean}
   * @default false
   */
  unsigned: boolean;
}
